home *** CD-ROM | disk | FTP | other *** search
Text File | 1992-06-07 | 4.1 KB | 188 lines | [TEXT/MACH] |
- ONLY MAC
- ALSO ASSEMBLER
- ALSO FORTH DEFINITIONS
-
- HEADER font.STR
- DC.B 6
- DC.B 'Monaco'
-
- .ALIGN
- (
- : get.MONACO.handle ( -- handle )
- { | name.handle font.handle
- [ 12 LALLOT ] FMInput.rec FMOutput.rec -- handle }
-
- 0 -> font.handle
- $53545220 1024 CALL GetResource ( -- handle )
- ?DUP 0= NOT
- IF
- ( -- handle )
- -> name.handle
- name.handle CALL HLock DROP
- name.handle @ ^ FMInput.rec CALL GetFNum
- name.handle CALL HUnLock DROP
- name.handle CALL DisposHandle
- ELSE
- ( -- )
- ['] font.STR ^ FMInput.rec CALL GetFNum
- THEN
-
- ^ FMInput.rec W@ 0= NOT
- IF
- ^ FMInput.rec W@ 9 CALL RealFont
- IF
- 9 ^ FMInput.rec 2+ W!
- 0 ^ FMInput.rec 4+ C! \ plain style
- -1 ^ FMInput.rec 5 + C! \ need bits
- 0 ^ FMInput.rec 6 + W! \ screen device
- $10001 ^ FMInput.rec 8 + !
- $10001 ^ FMInput.rec 12 + !
- ^ FMInput.rec CALL FMSwapFont ( -- FMOutPtr )
- DUP
- W@ 0=
- IF
- ( -- ptr )
- 2+ @ ( -- handle )
- -> font.handle
- ELSE
- DROP
- THEN
- THEN
- THEN
- font.handle
- ;
- )
- CODE get.MONACO.handle ( -- handle )
- LINK A2,#-24
- CLR.L -8(A2)
-
- EXG.L D4,A7
- SUBQ.L #4,A7 \ allocate space for handle
- MOVE.L #$53545220,-(A7) \ 'STR '
- MOVE.W #$400,-(A7) \ ID = 1024
- _GetResource \ get font name stored in resource fork
- MOVE.L (A7)+,-4(A2)
- EXG.L D4,A7
- BEQ.S @defaultfont \ didn't get it, use name in code
-
- EXG.L D4,A7
- MOVE.L -4(A2),A0 \ lock the string handle
- _HLock
- MOVE.L (A0),-(A7) \ get string pointer
- PEA -24(A2) \ push VAR for font number
- _GetFNum
-
- MOVE.L -4(A2),A0 \ get handle
- _HUnLock
- _DisposHandle
- EXG.L D4,A7 \ restore FORTH stack
- BRA.S @testforFont
-
- @defaultfont
- EXG.L D4,A7
- PEA font.STR \ push default font name
- PEA -24(A2) \ push VAR for font number
- _GetFNum
- EXG.L D4,A7
-
- @testforFont
- TST.W -24(A2) \ test returned font number
- BEQ.S @wordexit \ ID = 0 returns a NIL handle
-
- EXG.L D4,A7
- SUBQ.L #2,A7 \ allocate Boolean
- MOVE.W -24(A2),-(A7) \ push family ID
- MOVE.W #9,-(A7) \ push font size
- _RealFont
- MOVE.W (A7)+,D0 \ examine boolean
- EXG.L D4,A7
- BEQ.S @wordexit \ real font is not, return NIL handle
-
- MOVE.W #9,-22(A2) \ set font size in FMInput.rec
- CLR.B -20(A2) \ style = plain
- MOVE.B #-1,-19(A2) \ needBits = TRUE
- CLR.W -18(A2) \ device = 0 (screen)
- MOVE.L #$10001,-16(A2) \ scale factor of 1
- MOVE.L #$10001,-12(A2) \ scale factor of 1
-
- EXG.L D4,A7
- SUBQ.L #4,A7 \ allocate space for FMOutput ptr
- PEA -24(A2) \ push FMInput record ptr
- _FMSwapFont
- MOVE.L (A7)+,A0 \ get FMOutput ptr
- EXG.L D4,A7
-
- TST.W (A0) \ is error = 0
- BNE.S @wordexit
-
- MOVE.L 2(A0),-8(A2) \ stash font record handle
-
- @wordexit
- MOVE.L -8(A2),-(A6)
- UNLK A2
- RTS
- END-CODE
-
- .ALIGN
- HEADER get.MONACO.end
-
- VARIABLE CODE14.handle
- VARIABLE res.refnum
- VARIABLE saved.refnum
-
- " MACH2" CALL OpenResFile res.refnum !
- CALL CurResFile saved.refnum !
- res.refnum @ CALL UseResFile
-
- HEADER 'CODE'
- DC.B 'CODE'
-
- ' 'CODE' @ 14 CALL GetResource CODE14.handle !
-
- CODE14.handle @ CALL GetResAttrs $E7 AND ( clear locked and protected )
- CODE14.handle @ SWAP CALL SetResAttrs
-
- VARIABLE old.CODE14.size
- VARIABLE new.CODE14.size
- VARIABLE CODE14.patch.size
-
- CODE14.handle @ CALL SizeRsrc old.CODE14.size !
- CODE14.handle @ CALL DetachResource
-
- ' get.MONACO.end ' font.STR - DUP CODE14.patch.size !
- old.CODE14.size @ + DUP new.CODE14.size ! ( add size of patch )
- CODE14.handle @ SWAP CALL SetHandleSize DROP
-
- CODE14.handle @ CALL HLock DROP
-
- ' font.STR
- CODE14.handle @ @ old.CODE14.size @ +
- CODE14.patch.size @
- CMOVE
- ( the new code is copied in, now patch the old code)
-
- VARIABLE new.CODE14.ptr
-
- CODE14.handle @ @ CALL StripAddress new.CODE14.ptr !
-
- $4EBA new.CODE14.ptr @ $A0 + W! \ JSR d(PC)
-
- ' get.MONACO.handle ' font.STR -
- old.CODE14.size @ $A2 - + \ now have new offset
- new.CODE14.ptr @ $A2 + W!
-
- ( now put in bra.s for old.code )
- $601C new.CODE14.ptr @ $A4 + W! \ BRA.S $+1C
-
- ( patch is done, now update the program file )
-
- ' 'CODE' @ 14 CALL GetResource DUP
- CALL RmveResource CALL DisposHandle DROP
- res.refnum @ CALL UpdateResfile
-
- " DEBG" CONSTANT debug.str
-
- CODE14.handle @ ' 'CODE' @ 14 debug.str CALL AddResource
- res.refnum @ CALL UpdateResFile
-
- saved.refnum @ CALL UseResFile